package cn.com.fattiger.framework;

/**
 * 
 * BubbleSort
 * 
 * @author fattiger.xiaoyang
 * @date 2016/12/07
 * @qqGroup 454655009
 * @desc 冒泡排序经过双循环 
 * 		  主循环遍历数组长度 子循环对相邻两个数做比较 
 * 		  按照要求：
 * 		  如果从大到小排序，就把比较小的结果置换 如a<b为真 则说明a小 把a往后移 。 
 * 		  如果从小到大排序，就把比较大的结果置换 如a>b为真 则说明a大 把a往后移。
 *       一直遍历到数组结尾，然后主循环递增，子循环继续做比较，循环次数在主循环次数上递减
 *       为什么递减，因为经过一次遍历符合要求的数，已经置换到了数组的末尾， 这个过程就像冒泡，所以起名为冒泡排序 也有往前冒的写法
 *       这就需要自循环从数组末尾开始遍历
 */
public class BubbleSort {
	public static void main(String args[]) {
		int a[] = { 3, 2, 5, 1, 2, 3, 8 };
		sort(a);
		for (int m : a) {
			System.out.print(m);
		}
	}

	public static void sort(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			// for (int j = a.length - 1; j > i; j--)
			for (int j = 0; j < a.length - i - 1; j++) {
				if (a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
	}

	public static void sort2(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			for (int j = 0; j < a.length - i - 1; j++) {
				if (a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
	}
}
